#ifndef _OCTAEDRE_H
#define _OCTAEDRE_H

#include "Plan.hpp"
#include "FormeComposee.hpp"
#include <vector>

/**
 * Classe implémentant l'octaèdre pour le raytracing. Il est composé
 * de l'intersection de 8 plans. Il est donc définit dans le système
 * de coordonnées globales. La "base" est par définition un
 * parallélogramme, et c'est un plan de symétrie pour la figure.
 *
 * Forme::baryCentre est le centre de gravité de l'octaèdre.
 *
 * @author Jean-Marc Comby
 * @author Romain Desquesne
 * @author Johan "Solo" Luisier
 *
 * @date 12 Juin 2004
 */
class Octaedre : public FormeComposee
{
 public:
  // 3 coord de la base de la premiere pyramide avec la hauteur
  // la deuxieme et calculer automatiquement comme l'oppose
  Octaedre(const Coord& base1, const Coord& base2, const Coord& base3,
	   const Coord& hauteur);
  ~Octaedre();
 private:
  /**
   * Liste des 8 plans nécessaires.
   */
  std::vector< Plan::SharedPtr > listplan; // list les 8 plans
  /**
   * Liste des formes composées successives utilisées.
   */
  std::vector< FormeComposee::SharedPtr > listFC; // liste les formes composee
};

#endif
